#define _CRT_SECURE_NO_WARNINGS 1


//class A
//{
//public:
//	A(int a = 0)
//		:_a(a)
//	{
//		cout << "A(int a)" << endl;
//	}
//
//	A(const A& aa)
//		:_a(aa._a)
//	{
//		cout << "A(const A& aa)" << endl;
//	}
//
//	A& operator=(const A& aa)
//	{
//		cout << "A& operator=(const A& aa)" << endl;
//
//		if (this != &aa)
//		{
//			_a = aa._a;
//		}
//
//		return *this;
//	}
//
//	~A()
//	{
//		cout << "~A()" << endl;
//	}
//private:
//	int _a;
//};

//void func1(A aa)
//{
//
//}
//
//int main()
//{
//	A aa1 = 1;
//	const A& aa2 = 2;
//
//	func1(A(3));
//	func1(4);
//
//	return 0;
//}

// 现在的编译基本一定会做
// 同一个表达式，连续
// 构造 + 拷贝构造 -> 构造
// 拷贝构造 + 拷贝构造 -> 拷贝构造
// 
// 新编译器可能还会跨表达优化，把中间一些不必要对象也优化掉（不同的编译器可能不同）

//A func2()
//{
//	A aa(1);
//	return aa;
//}

//A func3()
//{
//	A aa1(1);
//	A aa2 = aa1;
//	A aa3 = aa2;
// 
//	return aa3;
//}
